
#include "nane/FileArchiveSystem/FileArchive.h"
#include "nane/FileArchiveSystem/FileArchiveImpl_.h"
#include "nane/FileArchiveSystem/FileArchiveSystemImpl_.h"

#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    FileArchive::FileArchive( const NullType& )
        : SubSystemProduct()
        , m( NULL )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    FileArchive::FileArchive( Implementation* _impl )
        : SubSystemProduct( _impl )
        , m( _impl )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    FileArchive::FileArchive( const FileArchive& _other )
        : SubSystemProduct( _other )
        , m( _other.m )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ReadFilePtr FileArchive::OpenFile( const char* _filename )
    {
        NANE_ASSERT_RV( m != NULL, "FileArchive must be valid", NullPtr );
        NANE_ASSERT_RV( _filename != NULL, "filename must be valid", NullPtr );
        IReadFile* readFileInterface = m->interface->OpenFile(_filename);
        return ReadFilePtr(readFileInterface);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
